# 出现异常
"""
try: #常识性执行代码
    print("我是王长帅不是很帅")
    print(aaa) # NameError: name 'aaa' is not defined
    print("我是王长帅不是很帅")
    print("我是王长帅不是很帅")
    print("我是王长帅不是很帅")
except: # 如果try语句中有错误的情况，走except
    print("程序出现错误，但是没有报错，因为我捕捉了异常！")
"""
"""
try:
    print("我是王长帅",a)
except:
    print("出现了错误")
"""
# 指定异常类型捕捉
"""
try:
    print(a)
except NameError:
    print("a没有被定义，出现错误！")
"""
# try except else  finally
# 异常单分支： except 没有跟任何的报错，表示万能捕捉
"""
try:
    print("我是王长帅",3/0)
except:
    print("try语句中出现了错误，会执行except")
else:
    print("如果try没有报错的话，那么会执行else")
finally:
    print("无论是否报错，我都会执行")
# 第一步：我是王长帅
# 第二步：如果try没有报错的话，那么会执行else
# 第三步：无论是否报错，我都会执行
"""
# 异常多分支
"""
try:
    L = [1,2]
    B = l[3]
    # print(a)
except IndexError as f:
    print(f"你看下是不是索引不存在，报错是：{f}")
except NameError as f:
    print(f"兄弟你看一下代码，报错了：{f}")
else:
    print("代码正确")
finally:
    print("完成了异常捕捉工作")
"""
# 合并异常
"""
try:
    L = [1,2]
    L[3]
    a
except (NameError,IndexError) as f:
    print("兴地你看一下代码")
    print(f)
else:
    print("代码正确")
finally:
    print("完成了异常捕捉工作")
"""
# 万能捕获
"""
try:
    L = [1,2]
    s = 3/0
except Exception as f: # Exception万能捕获
    print("兴地你看一下代码")
    print(f)
else:
    print("代码正确")
finally:
    print("完成了异常捕捉工作")
"""
# 自定义异常
"""
L = [1,2,3,4,5]
print(len(L))
if len(L) !=6:
    raise ModuleNotFoundError("列表长度必须大于5，我有我的规则")
"""
# 断言
# 预期的结果  和实际的结果比对
l = [1,2,3,4,5]
assert len(l) == 5
# len(l) !=5   长度不等于5
# len(l) > 5  长度大于5
# assert断言执行通过，不会有任何的提示信息
# assert断言未通过，会有报错的信息提示



